简单工厂模式又叫静态工厂方法模式,由一个工厂对象决定创建某一种产品对象类的实例。主要用来创建同一类对象。
场景一:
比如体育商店卖体育器材,里面有很多体育用品,及相关介绍,当我们想买一个篮球及相关介绍时,只需要温售货员,他会帮你找到所有的东西。
//篮球基类
var Baseketball = function () {
this.intro = '篮球盛行于美国'
}
Baseketball.prototype ={
getMember:function () {
console.log('每个队伍需要5名队员');
},
getBallSize:function () {
console.log('篮球很大');
}
}
//足球基类
var Football = function () {
this.intro = '足球在世界范围内很流行';
}
Football.prototype = {
getMember:function () {
console.log('每个队伍需要11名队员');
},
getBallSize:function () {
console.log('足球很大')
}
}
//网球基类
var Tennis = function () {
this.intro = '每年有很多网球系列赛';
}
Tennis.prototype = {
getMember:function () {
console.log('每个队伍需要1名队员');
},
getBallSize:function () {
console.log('网球很小');
}
}
//运动工厂
var SportFactory = function (name) {
switch (name) {
case 'NBA':return new Baseketball();
case 'wordCup':return new Football();
case 'FrenchOpen':return new Tennis();
}
}
//为世界杯创造一个足球,只需要记住运动工厂SportsFactory,调用并且创建
var football = SportFactory('wordCup');
console.log(football);
console.log(football.intro);
football.getMember();
场景二:
登录模块和注册模块的需求中有许多提示框,可以利用简单工厂模式,将提示框互相借鉴
var PopFactory = function (name) {
switch (name) {
case 'alert':return new LoginAlert();
case 'confirm':return new LoginConfirm();
case 'promt':return new LoginPrompt();
}
}
但是LoginAlert、LoginConfirm、LoginPrompt有很多是相同的,这时可以抽取相同的出来,如下:
function createPop(type,text) {
//创建一个对象,并对对象拓展属性和方法
var o =new Object();
o.content = text;
o.show = function () {
//显示方法
}
if(type == 'alert'){
//警示框差异部分
}
if(type == 'prompt'){
//提示框差异部分
}
if(type == 'confirm'){
//确认框差异部分
}
//将对象返回
return o;
}
//创建警示框
var userNameAlert = createPop('alert','用户名只能是26个字母和数字');
这两种方式创建简单工厂模式有区别,第一种是通过类实例化对象创建的,第二种是创建一个新对象然后包装增强其属性和功能来实现的。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。